home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / lcppb.zip / LCPPLIB.ZIP / STRITEM.CPP < prev    next >
C/C++ Source or Header  |  1991-07-04  |  3KB  |  75 lines

  1. // stritem.cpp -- String item class
  2.  
  3. #include <string.h>
  4. #include "error.h"
  5. #include "stritem.h"
  6.  
  7. /* -- Constructor. Create copy of string addressed by s as a new
  8. strItem object. Argument may be NULL. */
  9.  
  10. strItem::strItem(const char *s)
  11. {
  12.   sp = NULL;              // Initialize private data field
  13.   putString(s);           // Save argument string in object
  14. }
  15.  
  16. /* -- Alternate constructor. Creates copy of string containing up to
  17. the number of characters specified in maxLen. Argument may be NULL.
  18. If maxLen is 0 or less, allocate no space to string. */
  19.  
  20. strItem::strItem(const char *s, int maxLen)
  21. {
  22.   sp = NULL;              // Initialize private data field
  23.   putString(s, maxLen);   // Save limited-length string
  24. }
  25.  
  26. /* -- Destructor. Deletes space occupied by string and addressed by
  27. sp, which may be NULL. Runs when a strItem object is deleted. Because
  28. object is about to be deleted anyway, sp is not set to NULL. */
  29.  
  30. strItem::~strItem()
  31.   if (sp) delete sp;      // i.e. delete if sp != NULL
  32. }
  33.  
  34. /* -- Insert string into string object, replacing any string
  35. now addressed. */
  36.  
  37. void strItem::putString(const char *s)
  38. {
  39.   if (sp) delete sp;      // Dispose old string (if any)
  40.   sp = NULL;              // Prevent accidental use of old pointer
  41.   if (s == NULL) return;  // Exit if argument is NULL
  42.   sp = strdup(s);         // Copy s to new string at sp
  43.   if (sp == NULL)         // Test for strdup error
  44.     error(ERRMEM);       // Signal error copying string
  45. }
  46.  
  47. /* -- Overloaded putString function. Same as putString above, but
  48. limits the new string to maxLen characters. */
  49.  
  50. void strItem::putString(const char *s, int maxLen)
  51. {
  52.   int len;    // Length of string.
  53.  
  54.   if (sp) delete sp;       // Dispose old string (if any)
  55.   sp = NULL;               // Prevent accidental use of old pointer
  56.   if (s == NULL) return;   // Exit if argument is NULL
  57.   if (maxLen <= 0) return; // If maxLen <= 0, exit with sp==NULL
  58.   len = strlen(s);         // Set len to argument string length
  59.   if (len > maxLen)        // If string is longer than maxLen
  60.     len = maxLen;         //  limit len to maxLen
  61.   sp = new char[len + 1];  // Create space for string + NULL
  62.   if (sp == NULL)          // Test whether new() found enough memory
  63.     error(ERRMEM);        // If not, signal out of memory error
  64.   else {
  65.     strncpy(sp, s, len);  // Else, copy len chars to sp
  66.     sp[len] = NULL;       // Make sure string ends with NULL
  67.   }
  68. }
  69.  
  70.  
  71. // Copyright (c) 1990 by Tom Swan. All rights reserved
  72. // Revision 1.00    Date: 09/23/1990   Time: 04:41 pm
  73.  
  74.